﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;
using DAO;

using System.Data.SqlClient;
using System.Text.RegularExpressions;
namespace QL_Lichvantai
{
    public partial class frm_Quanly : Form
    {
       
        //Nhanvien_DTO nvDTO;
        //Lichvanchuyen_DTO lvcDTO;
        Lichvanchuyen_BUS lvcBUS = new Lichvanchuyen_BUS();
        List<Chitietlich_DTO> m_arrCTL;
        public frm_Quanly()
        {
            InitializeComponent();
        }
        

        private void frm_Quanly_Load(object sender, EventArgs e)
        {
            loadLich();
            //loadXe();
            loadTuyenDuong();
            //cbTuyenDuong.Items.Add("- Chọn tuyến đường -");
            cbTuyenDuong.SelectedItem = null;
            cbTuyenDuong.Text = "- Chọn tuyến đường -";
          //  cbXe.SelectedItem = null;
          //  cbXe.Text = "- - Chọn Xe - - -";


        }

 

        void loadLich()
        {
            ;
            DataSet ds = lvcBUS.LichLamViecALL();
            dgvDSLich.DataSource = ds.Tables[0];
            dgvDSLich.Columns[1].Width = 150;
            dgvDSLich.Columns[2].Width = 150;
        }

        void loadTuyenDuong() {
            DataTable dt;

            dt = lvcBUS.layTuyenDuong();
            cbTuyenDuong.DataSource = dt;
            cbTuyenDuong.DisplayMember = "TuyenDuong";
            cbTuyenDuong.ValueMember = "Ma_TuyenDuong";
        }

        void loadXe()
        {
            cbXe.Items.Clear();
            DataTable dt;

            dt = lvcBUS.layDanhSachXe();
            cbXe.DataSource = dt;
            cbXe.DisplayMember = "Ma_Xe";
            cbXe.ValueMember = "Ma_Xe";
        }

        void loadDSXeCuaLich(int maLich){
            
            DataTable dt;
            dt = lvcBUS.layDanhSachXeCua1Lich(maLich);
            dgvDSXe.AutoGenerateColumns = false;
            // dgvDSXe.DataSource = dt.DefaultView;
            dgvDSXe.DataSource = dt;
        }

       
        void ThemVaoDatagridViewDSXe(Chitietlich_DTO ctlDTO)
        {
            DataTable dt = (DataTable)dgvDSXe.DataSource;
            DataRow dtrow;
            if (dt != null)
            {
                dtrow = dt.NewRow();
                dtrow[1] = ctlDTO.Ma_xe;
                dtrow[2] = ctlDTO.So_taixe;
                dtrow[3] = ctlDTO.So_phulai;
                dtrow[4] = ctlDTO.So_taixetrong;
                dtrow[5] = ctlDTO.So_phulaitrong;
                dt.Rows.Add(dtrow);
                dgvDSXe.DataSource = dt;
            }
            else
            {
                dgvDSXe.Rows.Add(ctlDTO.Ma_xe, ctlDTO.So_taixe, ctlDTO.So_phulai, ctlDTO.So_taixetrong, ctlDTO.So_phulaitrong);
            }
        }

        void LayDanhSachXe()
        {
            m_arrCTL = new List<Chitietlich_DTO>();
            Chitietlich_DTO ctlDTO = new Chitietlich_DTO();
             ctlDTO.Ma_vanchuyen = int.Parse(txtMaLich.Text);
             if (dgvDSXe.Rows.Count > 1)
             {
                 for (int i = 0; i < dgvDSXe.Rows.Count-1; i++)
                 {
                     //MessageBox.Show(dgvDSXe[0, i].Value.ToString() + " " + dgvDSXe[1, i].Value.ToString() + " " + dgvDSXe.Rows.Count.ToString());
                     ctlDTO = new Chitietlich_DTO();
                     ctlDTO.Ma_vanchuyen = int.Parse(txtMaLich.Text);
                     ctlDTO.Ma_xe = int.Parse(dgvDSXe[0, i].Value.ToString());
                     ctlDTO.So_taixe = int.Parse(dgvDSXe[1, i].Value.ToString());
                     ctlDTO.So_phulai = int.Parse(dgvDSXe[2, i].Value.ToString());
                     ctlDTO.So_taixetrong = int.Parse(dgvDSXe[3, i].Value.ToString());
                     ctlDTO.So_phulaitrong = int.Parse(dgvDSXe[4, i].Value.ToString());
                     m_arrCTL.Add(ctlDTO);
                 }
             }
            //if (dt != null)
            //{
            //    DataRow dr = dt.NewRow(); ;
            //    for (int i = 0; i < dt.Rows.Count; i++)
            //    {
            //        dr = dt.Rows[i];
            //        ctlDTO.Ma_xe = int.Parse(dr[1].ToString());
            //        ctlDTO.So_taixe = int.Parse(dr[2].ToString());
            //        ctlDTO.So_phulai = int.Parse(dr[3].ToString());
            //        ctlDTO.So_taixetrong = int.Parse(dr[4].ToString());
            //        ctlDTO.So_phulaitrong = int.Parse(dr[5].ToString());
            //        m_arrCTL.Add(ctlDTO);
                    
            //    }
            //}
            //else
            //{
                 
               
            //}
            
           
        }
        private void dgvDSLich_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (this.dgvDSLich.SelectedCells.Count > 0 && !(this.dgvDSLich.SelectedCells[0].RowIndex == this.dgvDSLich.RowCount - 1))
            {

                int dong = this.dgvDSLich.SelectedCells[0].RowIndex;// lay chi so dong o dc chon
                txtMaLich.Text = dgvDSLich[0, dong].Value.ToString();
               dtpGioDi.Value =(DateTime) dgvDSLich[1, dong].Value ;
               dtpGioDen.Value =(DateTime) dgvDSLich[2, dong].Value ;
                cbTuyenDuong.SelectedValue = int.Parse(dgvDSLich[3, dong].Value.ToString());
                int maLich = int.Parse(dgvDSLich[0, dong].Value.ToString());
                loadDSXeCuaLich(maLich);
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //LayDanhSachXe((DataTable)dgvDSXe.DataSource);
            MessageBox.Show(m_arrCTL.Count.ToString());
        }

        Boolean kiemTra()
        {
            DateTime dt1 = DateTime.Parse(dtpGioDi.Value.ToShortDateString());
            DateTime dt2 = DateTime.Parse(dtpGioDen.Value.ToShortDateString());
            
            if ( Math.Round((dtpGioDi.Value - DateTime.Now).TotalDays) <=7 || cbTuyenDuong.SelectedIndex == -1 ||
                DateTime.Compare(dt1, dt2) >0 )
            {
                return false;
            }
            else if (DateTime.Compare(dt1, dt2) == 0)
            {
                if (dtpGioDi.Value.Hour - dtpGioDen.Value.Hour >=0)
                    return false;
            }
            return true;
        }

       
        private void btnLoadXe_Click(object sender, EventArgs e)
        {
            cbXe.DataSource = null;
            if (Math.Round((dtpGioDi.Value - DateTime.Now).TotalDays) > 7)
            {
              
                DataTable dt;
                dt = lvcBUS.layDanhSachXeRanh(dtpGioDi.Value);
                cbXe.DataSource = dt;
                cbXe.DisplayMember = "Ma_Xe";
                cbXe.SelectedIndex = -1;
            }
            else {
                MessageBox.Show("Ngày đi phải > ngày hiện tại 7 ngày");

            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (kiemTra())
            {
                Lichvanchuyen_DTO lvcDTO = new Lichvanchuyen_DTO();
                lvcDTO.Gio_di = dtpGioDi.Value;
                lvcDTO.Gio_den = dtpGioDen.Value;
               // lvcDTO.Ngay_di =  dtpNgayDi.Value;
                lvcDTO.Ma_tuyenduong = int.Parse(cbTuyenDuong.SelectedValue.ToString());
                lvcDTO.Tinhtrang = 0;
                Lichvanchuyen_BUS lvcBUS = new Lichvanchuyen_BUS();
                int kq = lvcBUS.themLichMoi(lvcDTO);
                if (kq == 1)
                {
                    MessageBox.Show("Them thanh cong");
                    loadLich();
                }
                else {
                    MessageBox.Show("That bai");
                }
            }
            else {
                DateTime dt1 = DateTime.Parse(dtpGioDi.Value.ToShortDateString());
                DateTime dt2 = DateTime.Parse(dtpGioDen.Value.ToShortDateString());
                //DateTime dt3 = DateTime.Parse(dtpNgayDi.Value.ToShortDateString());
                if (Math.Round((dtpGioDi.Value - DateTime.Now).TotalDays) <= 7)
                {
                    MessageBox.Show("Ngày đi phải lớn hơn ngày hiện tại 7 ngày");
                }
                else if (DateTime.Compare(dt1, dt2) == 0)
                {
                    if (dtpGioDi.Value.Hour - dtpGioDen.Value.Hour >= 0)
                        MessageBox.Show("Giờ đi phải lớn hơn giờ đến");
                }
                else if (cbTuyenDuong.SelectedIndex == -1)
                {
                    MessageBox.Show("Bạn chưa chọn tuyến đường");
                }
               
            }
            
            
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgvDSLich.SelectedCells.Count > 0 && !(this.dgvDSLich.SelectedCells[0].RowIndex == this.dgvDSLich.RowCount - 1))
                {

                    if (kiemTra())
                    {
                        Lichvanchuyen_DTO lvcDTO = new Lichvanchuyen_DTO();
                        lvcDTO.Ma_vanchuyen = int.Parse(txtMaLich.Text);

                        lvcDTO.Gio_di = dtpGioDi.Value;
                        lvcDTO.Gio_den = dtpGioDen.Value;
                        //lvcDTO.Ngay_di = dtpNgayDi.Value;
                        lvcDTO.Ma_tuyenduong = int.Parse(cbTuyenDuong.SelectedValue.ToString());
                        lvcDTO.Tinhtrang = 0;

                        LayDanhSachXe();
                        DataTable dt = lvcBUS.layDanhSachXeCua1Lich(lvcDTO.Ma_vanchuyen);
                        //  loadDSXeCuaLich(lvcDTO.Ma_vanchuyen);
                        lvcBUS.xoaChiTietLich(lvcDTO.Ma_vanchuyen);
                        for (int i = 0; i < m_arrCTL.Count; i++)
                        {
                            lvcBUS.capNhatXeVaoLich(1, m_arrCTL[i]);
                           /// MessageBox.Show(m_arrCTL[i].Ma_xe.ToString());
                        }
                        int kq = lvcBUS.capNhatLich(lvcDTO);
                        if (kq == 1)
                        {
                            lvcBUS.capNhatTaiXePhuLaiTrong(lvcDTO.Ma_vanchuyen);
                            MessageBox.Show("Sua thanh cong");
                            loadLich();
                        }
                        else
                        {
                            MessageBox.Show("That bai");
                        }
                    }
                    else
                    {
                        DateTime dt1 = DateTime.Parse(dtpGioDi.Value.ToShortDateString());
                        DateTime dt2 = DateTime.Parse(dtpGioDen.Value.ToShortDateString());
                        // DateTime dt3 = DateTime.Parse(dtpNgayDi.Value.ToShortDateString());
                        if (Math.Round((dtpGioDi.Value - DateTime.Now).TotalDays) <= 7)
                        {
                            MessageBox.Show("Ngày đi phải lớn hơn ngày hiện tại 7 ngày");
                        }
                        else if (DateTime.Compare(dt1, dt2) == 0)
                        {
                            if (dtpGioDi.Value.Hour - dtpGioDen.Value.Hour >= 0)
                                MessageBox.Show("Giờ đi phải lớn hơn giờ đến");
                        }
                        else if (cbTuyenDuong.SelectedIndex == -1)
                        {
                            MessageBox.Show("Bạn chưa chọn tuyến đường");
                        }
                    }

                }
                else
                {
                    MessageBox.Show("Bạn chưa chọn lich !");

                }
            }
            catch (Exception ex)
            {
                
                MessageBox.Show(ex.Message);
            }
            
        
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (this.dgvDSLich.SelectedCells.Count > 0 && !(this.dgvDSLich.SelectedCells[0].RowIndex == this.dgvDSLich.RowCount - 1))
            {
                  if (MessageBox.Show("Ban thuc su muon xóa  " , "Thong bao", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        int indexrow = this.dgvDSLich.SelectedCells[0].RowIndex;

                        //int indexcol = this.dgvDSXe.SelectedCells[0].ColumnIndex;
               
                        int maLich = int.Parse(dgvDSLich[0, indexrow].Value.ToString());
                        lvcBUS.XoaLich(maLich);
                        dgvDSLich.Rows.RemoveAt(indexrow);
                    }
                
            }
            else
            {
                MessageBox.Show("Bạn chưa chọn lich !");

            }
        }
        private void btnLamMoi_Click(object sender, EventArgs e)
        {
            txtMaLich.Text = "";
            dtpGioDi.Text = ""; 
            dtpGioDen.Text = ""; 
           // dtpNgayDi.Text = ""; 
            cbTuyenDuong.SelectedItem = null;
            cbTuyenDuong.Text = "- Chọn tuyến đường -";
            if (dgvDSXe.DataSource == null)
            {
                dgvDSXe.Rows.Clear();
            }
            else {
                dgvDSXe.DataSource = null;
            }
            loadLich();
        }

        public bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        private void btnCong_Click(object sender, EventArgs e)
        {
            if (this.dgvDSXe.SelectedCells.Count > 0 && !(this.dgvDSXe.SelectedCells[0].RowIndex == this.dgvDSXe.RowCount - 1))
            {
                int indexrow = this.dgvDSXe.SelectedCells[0].RowIndex;
                int indexcol = this.dgvDSXe.SelectedCells[0].ColumnIndex;
                if (indexcol > 0 && indexcol < 3)
                {
                    int soluong = int.Parse(dgvDSXe[indexcol, indexrow].Value.ToString()) + 1;//lay so luong và +1
                    int soluong1 = int.Parse(dgvDSXe[indexcol + 2, indexrow].Value.ToString()) + 1;
                    string sl = soluong.ToString();
                    string sl1 = soluong1.ToString();
                    dgvDSXe[indexcol, indexrow].Value = sl;
                    dgvDSXe[indexcol + 2, indexrow].Value = sl1;
                
                   // MessageBox.Show(indexrow.ToString() + "   " + indexcol.ToString());
                }
                else
                {
                    MessageBox.Show("Bạn phải chọn đúng cột tài xế hoặc phụ lái");
                }
            }
           
        }

        private void btnTru_Click(object sender, EventArgs e)
        {
            if (this.dgvDSXe.SelectedCells.Count > 0 && !(this.dgvDSXe.SelectedCells[0].RowIndex == this.dgvDSXe.RowCount - 1))
            {
                int indexrow = this.dgvDSXe.SelectedCells[0].RowIndex;
                int indexcol = this.dgvDSXe.SelectedCells[0].ColumnIndex;
                if (indexcol > 0 && indexcol < 3)
                {
                    int soluong = int.Parse(dgvDSXe[indexcol, indexrow].Value.ToString());//lay so luong và +1
                    int soluong1 = int.Parse(dgvDSXe[indexcol + 2, indexrow].Value.ToString());
                    if (soluong > 0) {
                        soluong -= 1;
                        string sl = soluong.ToString();
                        
                        dgvDSXe[indexcol, indexrow].Value = sl;
                     
                    }
                    if (soluong1 > 0)
                    {
                        soluong1 -= 1;
                       
                        string sl1 = soluong1.ToString();
                        
                        dgvDSXe[indexcol + 2, indexrow].Value = sl1;
                    }
                   

                    // MessageBox.Show(indexrow.ToString() + "   " + indexcol.ToString());
                }
                else
                {
                    MessageBox.Show("Bạn phải chọn đúng cột tài xế hoặc phụ lái");
                }
            }
        }

        private void cbXe_SelectedValueChanged(object sender, EventArgs e)
        {
            
        }

        private void cbXe_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cbXe.SelectedIndex != -1 && IsNumber(cbXe.Text))
            {
                Chitietlich_DTO ctlDTO = new Chitietlich_DTO();

                ctlDTO.Ma_xe = int.Parse(cbXe.Text);
                ctlDTO.So_taixe = 0;
                ctlDTO.So_phulai = 0;
                ctlDTO.So_taixetrong = 0;
                ctlDTO.So_phulaitrong = 0;
                //ThemXeVaoListViewDSXe(ctlDTO);
                
                if (dgvDSXe.Rows.Count > 1)
                {
                    int Maxe;
                    int kq = 0;
                    for (int i = 0; i < dgvDSXe.Rows.Count - 1; i++)
                    {
                         Maxe = int.Parse(dgvDSXe[0, i].Value.ToString());
                        if(Maxe==ctlDTO.Ma_xe){
                            kq = 1;
                        }
                    }
                    if (kq == 0)
                    {
                        ThemVaoDatagridViewDSXe(ctlDTO);
                    }
                    else {
                        MessageBox.Show("Đã có xe trong danh sách.");
                    }
                }
                else {
                    ThemVaoDatagridViewDSXe(ctlDTO);
                }
            }
        }

        private void btnXoaXe_Click(object sender, EventArgs e)
        {
            if (this.dgvDSXe.SelectedCells.Count > 0 && !(this.dgvDSXe.SelectedCells[0].RowIndex == this.dgvDSXe.RowCount - 1))
            {
                int indexrow = this.dgvDSXe.SelectedCells[0].RowIndex;
                if (MessageBox.Show("Ban thuc su muon xóa  " , "Thong bao", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        dgvDSXe.Rows.RemoveAt(indexrow);
                    }
            }
        }

        private void dtpNgayDi_ValueChanged(object sender, EventArgs e)
        {

           // dtpGioDen.Value = dtpNgayDi.Value;
            //dtpGioDi.Value = dtpNgayDi.Value;
        }




        
        

  

        

       

       
    }
}
